package com.zp.self.module.level_4_算法练习.数据结构.数组;

/**
 * @author By ZengPeng
 */
public class 力扣_566_重塑矩阵 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_566_重塑矩阵().matrixReshape(new int[][]{{1,2},{3,4}},1,4));
    }

    /**
    题目：在 MATLAB 中，有一个非常有用的函数 reshape ，它可以将一个 m x n 矩阵重塑为另一个大小不同（r x c）的新矩阵，但保留其原始数据。
     给你一个由二维数组 mat 表示的 m x n 矩阵，以及两个正整数 r 和 c ，分别表示想要的重构的矩阵的行数和列数。
     重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
     如果具有给定参数的 reshape 操作是可行且合理的，则输出新的重塑矩阵；否则，输出原始矩阵。

     示例 1：
     输入：mat = [[1,2],[3,4]], r = 1, c = 4
     输出：[[1,2,3,4]]

     示例 2：
     输入：mat = [[1,2],[3,4]], r = 2, c = 4
     输出：[[1,2],[3,4]]

    分析：【P 💖】
       1.遍历： 相除，得到每个下标的值
        --执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户

    边界值 & 注意点：
       1.
     **/
    public int[][] matrixReshape(int[][] mat, int r, int c) {
        if(mat.length*mat[0].length !=r*c) return mat;
        int clow=mat[0].length,index=0;
        int[][] res = new int[r][c];
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                res[i][j] = mat[index/clow][index++%clow];
            }
        }
        return  res;
    }
}
